#include <stdio.h>
#include <malloc.h>
#include <string.h>
// 指针也是值传递
void main(void)
{
    char *p = NULL;// p获取的是p里面保存的地址，*p获取的是p里面保存的地址里面的内容，&p获取的是p的地址
    printf("mallocAddr前&p=%x,p=%x\n", &p, p);
    mallocAddr(p);  // 传递的是p里面的内容，而不是p的地址
    printf("mallocAddr后&p=%x,p=%x\n", &p, p);

    printf("============================================\n\n");
    char *p1=NULL;
    printf("mallocAddr前&p1=%x,p1=%x\n", &p1, p1);
    mallocAddr1(&p1);  // 传递p1的地址
    printf("mallocAddr后&p1=%x,p1=%x\n", &p1, p1);

}

void mallocAddr1(char **s1)  
{
    printf("分配前&s1=%x,s1=%x\n", &s1, s1);
    *s1 = (char *)malloc(4);
    printf("分配后&s2=%x,s2=%x,*s1=%x\n", &s1, s1,*s1);
}

void mallocAddr(char *s)  
{
    printf("分配前&s=%x,s=%x\n", &s, s);
    s = (char *)malloc(4);
    printf("分配后&s=%x,s=%x\n", &s, s);
}